package com.tiancheng.trade.order.feign.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

/**
 * 开具发票参数
 *
 * @author kellen
 * @date 2024/6/26
 */
@Getter
@Setter
public class InvoiceDTO {

    // 业务渠道
    private String channel;
    // 业务流水号
    @JsonProperty("serialNo")
    private String serialNo;
    // 购方发票抬头
    @JsonProperty("buyerTitle")
    private String buyerTitle;
    // 抬头类型：1（个人/政府事业单位）、2（企业）
    @JsonProperty("titleType")
    private String titleType;
    // 发票类型
    @JsonProperty("invoiceTypeCode")
    private String invoiceTypeCode;
    // 购方纳税人识别号（当抬头类型为2时，必传）
    @JsonProperty("buyerTaxpayerNum")
    private String buyerTaxpayerNum;
    // 商户平台用户唯一标识
    @JsonProperty("userOpenid")
    private String userOpenid;
    // 如果填入将推送发票至该邮箱
    @JsonProperty("buyerEmail")
    private String buyerEmail;
    // 如果填入将推送开票结果短信至该手机号
    @JsonProperty("takerPhone")
    private String takerPhone;
    // 商户纳税人识别号（与商户编号任选其一）
    @JsonProperty("sellerTaxpayerNum")
    private String sellerTaxpayerNum;
    // 商户系统编号（与纳税人识别号任选其一）
    @JsonProperty("sellerTaxpayerSn")
    private String sellerTaxpayerSn;
    // 购方银行名称
    @JsonProperty("buyerBankName")
    private String buyerBankName;
    // 购方银行账号
    @JsonProperty("buyerBankAccount")
    private String buyerBankAccount;
    // 购方地址
    @JsonProperty("buyerAddress")
    private String buyerAddress;
    // 购方电话
    @JsonProperty("buyerPhone")
    private String buyerPhone;
    // 发票备注
    private String remark;
    // 商户订单号
    @JsonProperty("orderId")
    private String orderId;
    // 商户订单金额，单位分
    private Integer amount;
    // 订单商品列表
    private List<Item> items;
    // 订单基本信息json
    @JsonProperty("orderInfo")
    private String orderInfo;
    // 电子发票系统唯一标识
    @JsonProperty("invoiceSn")
    private String invoiceSn;
    // 开具冠名发票，板式编码
    @JsonProperty("template")
    private String template;
    // 开具冠名发票，板式内容(json)
    @JsonProperty("templateInfo")
    private String templateInfo;

    @Getter
    @Setter
    public static class Item {

        // 商品编码
        private String code;
        // 商品名称
        private String name;
        // 商品总价，单位分
        private Integer amount;
        // 商品类目，未在电子发票商户中心配置商品的业务侧，需要上传
        @JsonProperty("taxCode")
        private String taxCode;
        // 类目税率， 千分位（如30代表3%的税率）
        @JsonProperty("taxRate")
        private Integer taxRate;
        // 是否免税（1 免税）
        @JsonProperty("freeTaxRate")
        private Integer freeTaxRate;
        // 商品单价
        @JsonProperty("businessUnitPrice")
        private Integer businessUnitPrice;
        // 商品数量
        @JsonProperty("businessNum")
        private Integer businessNum;
        // 商品规格
        @JsonProperty("businessModels")
        private String businessModels;
        // 商品单位
        @JsonProperty("businessUnit")
        private String businessUnit;
    }

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class OrderInfo {

        // 订单名称
        @JsonProperty("orderName")
        private String orderName;
        // 商品种类数目
        @JsonProperty("goodsType")
        private Integer goodsType;
    }
}
